A computer program is typically made up of multiple modules. A module can be thought of as any part of the system that is built as a separate unit. Alternatively, the term module can apply to parts of the system that are shipped as a separate unit. As such, the term module can encompass both build time modules and run time modules.
When building a computer program, the various modules of the program may often be dependent on one another. As such, when one module changes, other modules may or may not change accordingly. As a result of this, all or most of the modules typically need to be rebuilt in order to ensure that the program is structurally sound and was not broken by the changes.
During the process of software development, a computer program is usually compiled and built multiple times over. Especially when producing large systems, building and testing the system can be quite time consuming. For example, each build of a large system may take several hours to re-compile and rebuild the system. As a result of this, many large enterprises now perform continuous builds, which continuously re-build the product or system while the developers are simultaneously working on modifying their source code. The goal of a continuous build is to detect errors. If a continuous build system is slow, then the feedback about these errors is slow and leaves the system in a broken state for longer periods of time. In this context, a developer may make a mistake that affects the work of other developers and may not know that this has happened for a significant period of time.
Various attempts have been made to optimize the build process, however, most of these attempts have tried to optimize only at the microcosmic level and on an informal basis. For example, developers may create some type of reference systems so that they know which modules will be affected by changes in a particular source code file. However, this requires some sort of coordination among people and usually does not reduce the time-consumption of entire re-builds of the system.
In light of this, what is needed is a system for more rapid development of software products, that promotes faster production of code while simultaneously ensuring the integrity and consistency of the system. In addition, a system is desirable that can predict with certainty the effects of various changes in source code files and other inputs to the build system. The applicant-inventor has identified these shortcomings as well as other needs in the art and conceived the subject matter described in this disclosure.